Date: Wed, 20 Nov 1996 22:16:58 GMT
Server: NCSA/1.5.1
Last-modified: Mon, 18 Nov 1996 22:48:55 GMT
Content-type: text/html
Content-length: 12996

<html>
<title> CPS 108 Software Design and Implementation </title>

<BODY bgcolor="#FFFFFF">
<h2> CPS 108, Software Design and Implementation, Fall 1996 </h2>

<hr>

<strong> Object-oriented programming, design,and analysis </strong>
<p>

[ 
<!WA0><A href="#reqs">Requirements</A> |
<!WA1><A href="http://www.cs.duke.edu/~ola/courses/cps108/fall96/syllabus.html">Syllabus</A> |
<!WA2><A href="#books">Books</A> |
<!WA3><A href="#worktodo">Assignments</A> |
<!WA4><A href="#code">Code</A> |
<!WA5><A href="#project"">Project</A> |
<!WA6><A href="#groups">Groups</A> |
<!WA7><A href="#support">Teaching</A>|
<!WA8><A href="#tools">Tools</A> 
]
 <P>
<PRE>

</PRE>

<CENTER>
<!WA9><A HREF="#toonpresent">
<STRONG>Making a Toonces Presentation</STRONG>
<!WA10><IMG SRC=http://www.cs.duke.edu/images/New.gif ALT="*">
</A>
</CENTER>

<p>
<h2> <A NAME="overview"> Overview </A> </h2>

A <!WA11><A href="http://www.cs.duke.edu/~ola/courses/cps108/fall96/overview.html">
description of the course</A> and an overview of what is covered.
<P>

<!WA12><IMG ALIGN=CENTER
SRC="http://www.cs.duke.edu/~ola/images/dilbert/gui.gif" 
ALT = "*">


<hr>

<h2> <A NAME="reqs"> Requirements </A> </h2>
There will be a large group project (four to six person teams), two
smaller group projects, and two individual "mastery" projects.  The
mastery projects are designed to ensure that everyone who completes the
course is "certified" as capable of writing and understanding reasonably
complex C++ programs.  Since some people on the large team project may
not write any C++ code, the mastery projects are necessary for this
certification. One of the mastery projects will also use Java.  There will
be at least three written/smaller assignments/programs.
<p>

<center>
<table border=1>
<caption><font size=+1> <strong> Grading </strong>
</font> </caption>
<tr>
  <th> small assignments, class presentation, class participation
  <th> 5 %
<tr>
  <th> mastery exams
  <th> 20 %
<tr>
  <th> small group projects
  <th> 35 %
<tr>
  <th> large group project
  <th> 40 %
</table>
</center>


<hr>
<h2> <A NAME="syllabus"> Syllabus </A> </h2>

The <!WA13><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/syllabus.html">syllabus has information 
</A>about readings and topics for discussion.

<hr>
<h2> <A NAME="worktodo"> Assignments </A> </h2>

<!WA14><IMG ALIGN=CENTER
SRC="http://www.cs.duke.edu/~ola/images/dilbert/bug.gif" 
ALT = "*">

<DL>
<DT>
<!WA15><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*">
<!WA16><A href="http://www.cs.duke.edu/~ola/courses/cps108/fall96/grepple.html"> <em>grepple</em> </A> 
<DD>
Design due Monday, September 9<BR>
Prototype Friday, September 13<BR>
Final Project due Monday,September 16
<p>

<DT>
<!WA17><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*">
<!WA18><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/toonces/toonces.html"><EM>toonces</EM></A>
<DD>
<STRONG>The Object-Oriented Networked Calendar Extraction
System</STRONG>
 <P>
<!WA19><A HREF="http://www.cs.duke.edu/~gadde/cps108/fall96/tooncegroups.html">
Groups for <EM>toonces</EM></A>
 <P>
<!WA20><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/toonces/toonupdate.html">
Revised due dates and submission guidelines for design
 <P>
 <P>
<!WA21><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/toonces/toonturnin.html">
What to turn in for toonces.
</A>
 <P>
<A NAME="toonpresent">
Making a <!WA22><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/toonces/toonpresent.html">
<EM>Toonces</EM> presentation</A>.<!WA23><IMG SRC=http://www.cs.duke.edu/images/New.gif ALT="*">
</A>
<P>

<DT>
<!WA24><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*">
<!WA25><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/deque.html">Mastery I: Templated Deques</A>
<DD>
Due: October 7 (there will be a group project started
during this time)
<P>

<DT>
<!WA26><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*">
<!WA27><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/joggle.html">Mastery II: Boggle/Joggle</A>
<DD>
Due: December 9
 <P>
Preliminary Joggle Code: see also <TT>~ola/cps108/joggle</TT>
<UL>
<LI> <!WA28><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/joggle/JoggleReader.java">JoggleReader.java</A>
<LI> <!WA29><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/joggle/JoggleGraph.java">JoggleGraph.java</A>
<LI> <!WA30><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/joggle/JogglePlay.java">JogglePlay.java</A>
<LI> <!WA31><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/joggle/JoggleFE.java">JoggleFE.java</A>
<LI> <!WA32><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/joggle/JoggApp.java">JoggApp.java</A>
<LI> <!WA33><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/joggle/bogdict.txt">bogdict.txt</A>
</UL>

<P>

</DL>

<HR>
<H2><A NAME="code">Code Examples</A></H2>
<P>

<DL>
<DT>
<!WA34><IMG SRC=http://www.cs.duke.edu/images/silverball.gif ALT="*">
<!WA35><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/nutshell/">Java in a Nutshell</A>
All the examples from the O'Reilly book <EM>Java in a Nutshell</EM>.
These are accessible here, as source and runnable applets, and also
in <TT>~ola/cps108/nutshell</TT> on both cs and acpub machines.
<DD> 
 <P>

<DT>
<!WA36><IMG SRC=http://www.cs.duke.edu/images/silverball.gif ALT="*">
Templated map classes including an abstract base
class and two implementations: unsorted vector and
hash table
<DD> 
<UL>
<LI> <!WA37><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/map.h">map.h </A>(abstract base class)
<LI> <!WA38><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/uvmap.h">uvmap.h </A>, unsorted vector
interface
<LI> <!WA39><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/uvmap.cc">uvmap.cc </A>, unsorted vector
implementation
<LI> <!WA40><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/hmap.h">hmap.h </A>, hash table interface
<LI> <!WA41><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/hmap.cc">hmap.cc </A> hash table
implementation
 <P>
<LI> <!WA42><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/words/iterator.h">iterator.h</A> iterator
base class
<LI> <!WA43><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/words/uviterator.h">uviterator.h</A> iterator
class for uv map
<LI> <!WA44><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/words/iterator.cc">iterator.cc</A>
implementation of uvmap iterator
<LI> <!WA45><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/words/hiterator.h">hiterator.h</A> iterator
class for hashtable map
<LI> <!WA46><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/words/hiterator.cc">hiterator.cc</A>
implementation of hashtable map iterator
<LI> <!WA47><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/words/iterproxy.h">iterproxy.h</A>
proxy class for iterator (pointer proxy)

</UL>

<p>

<DT>
<!WA48><IMG SRC=http://www.cs.duke.edu/images/silverball.gif ALT="*">
A word tracking program (counts # occurrences of all words
in a file) that uses map classes is available.
<DD> 
<UL>
<LI> <!WA49><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/words/words.cc">words.cc</A> the main
source code file
<LI> <!WA50><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/words/templatewords.cc">templatewords.cc</A>
the template instantiation file
<LI> <!WA51><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/words/Makefile">Makefile</A> the
Makefile (site specific and requiring map classes)
</UL>

<p>

<DT>
<!WA52><IMG SRC=http://www.cs.duke.edu/images/silverball.gif ALT="*">
Two views of a menu-driven program for manipulating images.  One is
non-object oriented (although there is a class used).  The other is very
object oriented and uses the Command Pattern to implement commands
used within menus (the menus are text based).
<DD> 
<P>
First the non object oriented version
<UL>
<LI> <!WA53><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/usepix.cc">usepix.cc</A> the
main  program 
<LI> <!WA54><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/pixmap.h">pixmap.h</A> the
interface/header file for the Pixmap class (manipulates images)
<LI> <!WA55><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/pixmap.cc">pixmap.cc</A> the
implementation of the Pixmap class
</UL>
 <P>
The object oriented version (uses the Pixmap class too)
<UL>
<LI> <!WA56><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/application.cc">application.h</A>
the main application class interface
<LI> <!WA57><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/application.cc">application.cc</A>
the main application class implementation
 <P>

<LI> <!WA58><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/command.h">command.h</A>
the abstract base class for commands
<UL>
<LI> <!WA59><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/quitcommand.h">quitcommand.h</A>
The quit command class interface
<LI> <!WA60><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/quitcommand.cc">quitcommand.cc</A>
The quit command class implementation
<LI> <!WA61><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/readcommand.h">readcommand.h</A>
The read command class interface
<LI> <!WA62><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/readcommand.cc">readcommand.cc</A>
The read command class implementation
<LI> <!WA63><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/displaycommand.h">
displaycommand.h</A> The display command interface
<LI> <!WA64><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/displaycommand.cc">
displaycommand.cc</A> The display command implementation
<LI> <!WA65><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/simpcommand.h">simpcommand.h</A>
A templated class (using pointers to member functions) for
non-parameterized commands.
</UL>
<LI> <!WA66><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/menu.h">menu.h</A>
The menu class interface
<LI> <!WA67><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/menu.cc">menu.cc</A>
The menu class implementation
<LI> <!WA68><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/menuitem.h">menuitem.h</A>
The menu item class interface
<LI> <!WA69><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/menuitem.cc">menuitem.cc</A>
The menu item class implementation
<P>

<LI> <!WA70><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/filelister.h">filelister.h</A>
Read one of a list of files (from a hard-wired directory) interface
<LI> <!WA71><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/filelister.cc">filelister.cc</A>
 <P>
<LI> <!WA72><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/templateapp.cc">templateapp.cc</A>
template instantiation file
<P>
<LI> <!WA73><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/usepix/Makefile">Makefile</A>
</UL>
<P>

<DT>
<!WA74><IMG SRC=http://www.cs.duke.edu/images/silverball.gif ALT="*">
A class for checking memory leaks (very rudimentary) by overloading
new and delete on a global basis
<DD> 
<UL>
<LI> <!WA75><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/heapstats.h">heapstats.h</A>
<LI> <!WA76><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/code/heapstats.cc">heapstats.cc</A>
</UL>



</DL>

<hr>
<H2>
In class design exercises.  Programming in the small and in the large
</H2>
<P>

<DL>
<DT>
<!WA77><IMG SRC=http://www.cs.duke.edu/images/redball.gif ALT="*"> TBA
<DD> 
<p>

<DT>
<!WA78><IMG SRC=http://www.cs.duke.edu/images/redball.gif ALT="*"> TBA
<DD> 
<p>



</DL>

<hr>

<h2> <A NAME="books"> Books </A> </h2>

There are several books we'll use in the course


<DL>
<DT>
<!WA79><IMG SRC=http://www.cs.duke.edu/images/redball.gif ALT="*"> 
<em> Mastering Object-Oriented Design in C++ </em> by Cay Horstmann

<DT>
<!WA80><IMG SRC=http://www.cs.duke.edu/images/redball.gif ALT="*"> 
<em> Java in a Nutshell </em> by Flanagan

<DT>
<!WA81><IMG SRC=http://www.cs.duke.edu/images/redball.gif ALT="*"> 
<em> Object-Oriented Design Heuristics </em> by Arthur Riel


</DL>
<p>
<strong> Optional Books </strong>

<DL>

<DT>
<!WA82><IMG SRC=http://www.cs.duke.edu/images/yellowball.gif ALT="*"> 
<em> The C++ Programming Language </em> by Bjarne Stroustrup



<DT>
<!WA83><IMG SRC=http://www.cs.duke.edu/images/yellowball.gif ALT="*"> 
<em> Effective C++: 50 Specific Ways to Improve Your Programs
and Designs </em> by Scott Meyers


<DT>
<!WA84><IMG SRC=http://www.cs.duke.edu/images/yellowball.gif ALT="*"> 
<em> Design Patterns: Elements of Reusable Object-Oriented Software
</em> by the "gang of four"


</DL>

<STRONG> Books on Reserve </STRONG>

<DL>
<DT>
<!WA85><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*"> 
<em> The Mythical Man-Month </em> by Fred Brooks

<DT>
<!WA86><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*"> 
<em> Debugging the Development Process </em> by Steve Maguire

</DL>

<hr>
<h2> <A NAME="support"> Teaching staff </h2>


Support personnel: one professor, two TAs (one TA, one or more UTAs)
<DL>
<DT>
<!WA87><IMG SRC=http://www.cs.duke.edu/images/yellowball.gif ALT="*"> 
<strong> Professor  </strong>
<!WA88><A href="http://www.cs.duke.edu/~ola"> Owen Astrachan</A>
<DD> 
<UL>
<li> Office: D241, LSRC
<li> email: <!WA89><A href="mailto:ola@cs.duke.edu"> ola@cs.duke.edu
</A> or <!WA90><A href="mailto:ola@acpub.duke.edu"> ola@acpub.duke.edu
</A>
<li> phone: 660-6522
<li> office hours: Monday 2:00-3:30, Thursday 11:00-12:30 <br>
any time for quick questions
</UL>
<p>



<DT>
<!WA91><IMG SRC=http://www.cs.duke.edu/images/yellowball.gif ALT="*"> 
<strong> TA  </strong>
<!WA92><A href="http://www.cs.duke.edu/~gadde"> Syam Gadde</A>
<DD>
<UL>
<li> Office: D230, LSRC
<li> email: <!WA93><A href="mailto:gadde@cs.duke.edu"> gadde@cs.duke.edu </A> 
<li> phone: 660-6516
<li> office hours: Tuesday 2:00-3:30, Wednesday 1:00-2:30
</UL>


<DT>
<!WA94><IMG SRC=http://www.cs.duke.edu/images/yellowball.gif ALT="*"> 
<strong> UTAs </strong>
Trevor Selby
<DD>
<UL>
<li> Office: D240 LSRC
<li> email: trevor@cs.duke.edu
<li> phone: 660-65xx
<li> office hours: 9-11 pm Teer Cluster (needs verification)
</UL>

</DL>

<hr>

<h3> <A NAME="groups">Groups</A> </h3>
<!WA95><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*"><strong> Groups </strong>

<!WA96><A href="http://www.cs.duke.edu/~gadde/cps108/fall96/students.html">
Groups for the first assignment </A>
<P>
Please fill out the information asked for 
<!WA97><A HREF="http://www.cs.duke.edu/~ola/courses/cps108/fall96/groups.html">about groups and group preferences</A> and
submit it or turn it in during class.

<hr>

<h2> <A NAME="project"> Project </A> </h2>


Information not yet available

<hr>

<h2> <A NAME="tools"> Programming Tools </A> </h2>


<DL>

<DT>
<!WA98><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*"> 
<!WA99><A href="http://www.cs.duke.edu/~gadde/cps108/fall96/GetOpt.html"> GetOpt</A>
<DD>
Information on parsing command line arguments
<p>

<DT>
<!WA100><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*"> 
<!WA101><A href="http://www.cs.duke.edu/~ola/courses/cps108/templates.html">
using templates</A>
<DD>
How to instantiate templated classes when using g++ (and some other
compilers that don't generate template repositories).
<p>

<DT>
<!WA102><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*"> 
<!WA103><A href="http://www.cs.duke.edu/~saw1/uta108/gprof.html"> gprof </A>
<DD>
Information on profiling programs
<p>


<DT>
<!WA104><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*"> 
<!WA105><A HREF="http://www.cs.duke.edu/~gadde/cps108/fall96/javacode.html">
Java References, Code, and Help</A>
 <P>

<DT>
<!WA106><IMG SRC=http://www.cs.duke.edu/images/greenball.gif ALT="*"> 
Information on CVS and RCS coming
<DD>
</DL>


<hr>




<hr>
<!WA107><IMG ALIGN=MIDDLE SRC="http://www.cs.duke.edu/~ola/images/idiottiny.gif">
<!WA108><A href = "http://www.cs.duke.edu/~ola">
Back to Owen Astrachan's home page </A>

</BODY>
</html>
